package portal.converter;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import portal.entities.AbstractEntity;
import portal.vo.AbstractVO;

public class convVo {

	public convVo() {
	}
	
	/**
	 * Convierte de List<AbstractBean> -----> List<AbstractVo>
	 * 
	 * @param <T>
	 *            extends AbstractVo (cualquier cosa que lo implemente)
	 * @param <F>
	 *            extends AbstractBean<T>
	 * @param listaB
	 *            de AbstractBean que le pasan para convertir a lista de VO
	 * @return listaV lista de VO convertidos
	 */
	public static <T extends AbstractVO, F extends AbstractEntity<T>> List<T> getListaVoFromEntity(
			List<F> listaB) {
		List<T> condsV = new ArrayList<T>();
		if (listaB != null && listaB.size() > 0) {
			// try {
			Iterator<F> it = listaB.iterator();
			T cond = null;
			while (it.hasNext()) {
				cond = ((AbstractEntity<T>) it.next()).getVO();
				condsV.add(cond);
			}
			// } catch (LazyInitializationException e) {}
		}
		return condsV;
	}

	/**
	 * Convierte de List<AbstractVo> -----> List<AbstractBean>
	 * 
	 * @param <T>
	 *            extends AbstractVo (cualquier cosa que lo implemente)
	 * @param <F>
	 *            extends AbstractBean<T>
	 * @param listaV
	 *            lista de VO que le pasan para convertir a lista de
	 *            AbstractBean
	 * @return listaB de AbstractBean
	 */
	public static <T extends AbstractVO, F extends AbstractEntity<T>> List<F> getListaEntityFromVo(
			List<T> listaV) {
		List<F> condsB = new ArrayList<F>();
		if (listaV != null && listaV.size() > 0) {
			Iterator<T> it = listaV.iterator();
			Class<? extends F> clase = null;
			clase = AsociacionVoBeanFactory.getBeanClassFromVo(listaV.get(0).getClass());
			while (it.hasNext()) {
				try {
					F cond = clase.newInstance(); 
					cond.setVO(it.next());
					condsB.add(cond);
				} catch (InstantiationException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				}
			}
		}
		return condsB;
	}
	
	public static <T extends AbstractVO, F extends AbstractEntity<T>> List<F> 
	getListaPreciosBeanFromVo(List<T> listaV) {
		return getListaEntityFromVo(listaV);
	}

}